<?php
/**
 * 单例模式命名空间
 */
namespace DesignPatterns\Creational\Singleton;
/**
 * singleton单例模式
 */
class Singleton{

    private static $instance;

    /**
     * 获取单例类的一个实例(仅有一个实例)
     * @return Singleton instance
     */
    public static function getInstance()
    {
        /*先判断是否已经存在instance，没有再创建*/
        if (null === static::$instance) {
            static::$instance = new static;//new static()是由调用者决定的，表示谁调用就new谁，new self表示new的是当前单例类
        }

        return static::$instance;
    }
    /**
     * 构造函数私有，不允许在外部实例化
     *
     */
    private function __construct()
    {
    }

    /**
     * 防止对象实例被克隆
     *
     * @return void
     */
    private function __clone()
    {
    }

    /**
     * 防止被反序列化
     *
     * @return void
     */
    private function __wakeup()
    {
    }
}